home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / cmds / oldwish / RCS / wishUtils.c,v < prev   
Text File  |  1990-01-19  |  8KB  |  379 lines

  1. head     1.4;
  2. branch   ;
  3. access   ;
  4. symbols  ;
  5. locks    mgbaker:1.4; strict;
  6. comment  @ * @;
  7.  
  8.  
  9. 1.4
  10. date     89.01.11.11.58.50;  author mlgray;  state Exp;
  11. branches ;
  12. next     1.3;
  13.  
  14. 1.3
  15. date     88.11.03.19.45.34;  author mlgray;  state Exp;
  16. branches ;
  17. next     1.2;
  18.  
  19. 1.2
  20. date     88.11.02.14.51.05;  author mlgray;  state Exp;
  21. branches ;
  22. next     1.1;
  23.  
  24. 1.1
  25. date     88.10.03.12.48.54;  author mlgray;  state Exp;
  26. branches ;
  27. next     ;
  28.  
  29.  
  30. desc
  31. @X11: works pretty much now.
  32. @
  33.  
  34.  
  35. 1.4
  36. log
  37. @Temporary checkin
  38. @
  39. text
  40. @/* 
  41.  * wishUtils.c --
  42.  *
  43.  *    Useful stuff -- delivering error msgs, etc.
  44.  *
  45.  * Copyright 1987 Regents of the University of California
  46.  * All rights reserved.
  47.  * Permission to use, copy, modify, and distribute this
  48.  * software and its documentation for any purpose and without
  49.  * fee is hereby granted, provided that the above copyright
  50.  * notice appear in all copies.  The University of California
  51.  * makes no representations about the suitability of this
  52.  * software for any purpose.  It is provided "as is" without
  53.  * express or implied warranty.
  54.  */
  55.  
  56. #ifndef lint
  57. static char rcsid[] = "$Header: /a/newcmds/wish/RCS/wishUtils.c,v 1.3 88/11/03 19:45:34 mlgray Exp Locker: mlgray $ SPRITE (Berkeley)";
  58. #endif not lint
  59.  
  60.  
  61. #include "string.h"
  62. #include "sx.h"
  63. #include "util.h"
  64. #include "wishInt.h"
  65.  
  66. static    WishWindow    *menuWindow = NULL;
  67.  
  68.  
  69. /*
  70.  *----------------------------------------------------------------------
  71.  *
  72.  * WishCvtToPrintable --
  73.  *
  74.  *    Given a keystroke binding that may contain control characters
  75.  *    and/or meta characters, this routine produces a printable version
  76.  *    of the string.
  77.  *
  78.  * Results:
  79.  *    Up to length characters are stored at *result (including the
  80.  *    terminating NULL character).
  81.  *
  82.  * Side effects:
  83.  *    None.
  84.  *
  85.  *----------------------------------------------------------------------
  86.  */
  87. void
  88. WishCvtToPrintable(string, length, result)
  89.     char    *string;        /* Binding string to be converted. */
  90.     int        length;            /* No. of bytes available at result. */
  91.     char    *result;        /* Where to store printable form. */
  92. {
  93.     int        chunkSize;
  94.     char    chunk[20];
  95.     char    *p;
  96.  
  97.     /*
  98.      * Process the input string one character at a time to do the
  99.      * conversion.
  100.      */
  101.  
  102.     p = result;
  103.     for ( ; *string != 0; string++) {
  104.     int i;
  105.  
  106.     /*
  107.      * Figure out how to represent this particular character.
  108.      */
  109.  
  110.     i = *string & 0377;
  111.     if (i <= 040) {
  112.         if (i == 033) {
  113.         strcpy(chunk, "ESC");
  114.         } else if (i == '\n') {
  115.         strcpy(chunk, "RET");
  116.         } else if (i == '\t') {
  117.         strcpy(chunk, "TAB");
  118.         } else if (i == ' ') {
  119.         strcpy(chunk, "SPACE");
  120.         } else {
  121.         chunk[0] = 'C';
  122.         chunk[1] = '-';
  123.         chunk[2] = i - 1 + 'a';
  124.         chunk[3] = 0;
  125.         }
  126.     } else if (i < 0177) {
  127.         chunk[0] = i;
  128.         chunk[1] = 0;
  129.     } else if (i == 0177) {
  130.         strcpy(chunk, "DEL");
  131.     } else if ((i > 0240) && (i < 0377)) {
  132.         chunk[0] = 'M';
  133.         chunk[1] = '-';
  134.         chunk[2] = i & 0177;
  135.         chunk[3] = 0;
  136.     } else {
  137.         sprintf(chunk, "%#x", i);
  138.     }
  139.  
  140.     /*
  141.      * Add this chunk onto the result string (if it fits), with a
  142.      * preceding space if this isn't the first chunk.
  143.      */
  144.  
  145.     if (p != result) {
  146.         if (length < 1) {
  147.         break;
  148.         }
  149.         *p = ' ';
  150.         p++;
  151.         length--;
  152.     }
  153.     chunkSize = strlen(chunk);
  154.     if (length < chunkSize) {
  155.         strncpy(p, chunk, length);
  156.         p += length;
  157.         length = 0;
  158.         break;
  159.     } else {
  160.         strcpy(p, chunk);
  161.         p += chunkSize;
  162.         length -= chunkSize;
  163.     }
  164.     }
  165.  
  166.     if (length == 0) {
  167.     p--;
  168.     }
  169.     *p = 0;
  170. }
  171.  
  172.  
  173.  
  174. /*
  175.  *----------------------------------------------------------------------
  176.  *
  177.  * WishMenuProc --
  178.  *
  179.  *    This procedure is invoked whenver a menu command is invoked
  180.  *    in an wish window.  It now forces the interpreter to be the
  181.  *    one for the central display window.  Should I have a separate one
  182.  *    for the menus?
  183.  *
  184.  * Results:
  185.  *    None.
  186.  *
  187.  * Side effects:
  188.  *    The command.
  189.  *
  190.  *----------------------------------------------------------------------
  191.  */
  192. void
  193. WishMenuProc(command)
  194.     char    *command;        /* Command string */
  195. {
  196.     Window        w;
  197.     WishWindow    *aWindow;
  198.  
  199.     if (menuWindow == NULL) {
  200.     return;
  201.     }
  202.     w = menuWindow->surroundingWindow;
  203.     if (XFindContext(wishDisplay, w, wishWindowContext, (caddr_t) &aWindow)
  204.         != 0) {
  205.     Sx_Panic(wishDisplay, "Wish didn't recognize given window.");
  206.     }
  207.  
  208.     (void) WishDoCmd(aWindow, command);
  209. #ifdef NOTDEF
  210.     /* could have destroyed window stuff again... */
  211. #endif NOTDEF
  212. }
  213.  
  214.  
  215.  
  216. /*
  217.  *----------------------------------------------------------------------
  218.  *
  219.  * WishMakeMenu --
  220.  *
  221.  *    Duplicate the command strings in an array of menu entries, then
  222.  *    invoke Sx to create a menu.  It's needed in order to make sure
  223.  *    that all of the command strings in all menus, even the initial
  224.  *    default menus, are dynamically allocated.
  225.  *
  226.  * Results:
  227.  *    None.
  228.  *
  229.  * Side effects:
  230.  *    Memory gets allocated, and a menu gets created.
  231.  *
  232.  *----------------------------------------------------------------------
  233.  */
  234. void
  235. WishMakeMenu(aWindow, name, size, info)
  236.     register    WishWindow    *aWindow;/* Window in which to create menu. */
  237.     char    *name;                /* Name of menu. */
  238.     int        size;                /* Number of entries in menu. */
  239.     Sx_MenuEntry    info[];        /* Menu inforamtion. */
  240. {
  241.     Sx_MenuEntry    entries[SX_MAX_MENU_ENTRIES];
  242.     int            i;
  243.  
  244.     for (i = 0; i < size; i++) {
  245.     entries[i] = info[i];
  246.     entries[i].clientData = (ClientData) Util_Strcpy((char *) NULL,
  247.         (char *) info[i].clientData);
  248.     }
  249.     (void) Sx_MenuCreate(wishDisplay, aWindow->menuBar, name, size, entries,
  250.         aWindow->fontPtr, aWindow->menuForeground,
  251.         aWindow->menuBackground);
  252. }
  253.  
  254. /*
  255.  *----------------------------------------------------------------------
  256.  *
  257.  * WishMenuEntryProc --
  258.  *
  259.  *    This procedure is invoked by the Sx dispatcher whenever the
  260.  *    mouse enters a menu bar window.
  261.  *
  262.  * Results:
  263.  *    None.
  264.  *
  265.  * Side effects:
  266.  *    The variable menuWindow is updated to keep track of which
  267.  *    Wish window the cursor's in, so that we'll know when a menu
  268.  *    entry gets invoked.
  269.  *
  270.  *----------------------------------------------------------------------
  271.  */
  272. void
  273. WishMenuEntryProc(aWindow, eventPtr)
  274.     WishWindow *aWindow;        /* Window whose menu bar was just
  275.                      * entered. */
  276.     XEnterWindowEvent *eventPtr;    /* Event describing window entry. */
  277. {
  278. #ifdef NOTDEF
  279.     if (eventPtr->subwindow != NULL) {
  280.     return;
  281.     }
  282. #endif /* NOTDEF */
  283.     menuWindow = aWindow;
  284. }
  285. @
  286.  
  287.  
  288. 1.3
  289. log
  290. @Fixed many bugs - notifiers no longer trash the display.
  291. @
  292. text
  293. @d18 1
  294. a18 1
  295. static char rcsid[] = "$Header: /a/newcmds/wish/RCS/wishUtils.c,v 1.2 88/11/02 14:51:05 mlgray Exp Locker: mlgray $ SPRITE (Berkeley)";
  296. @
  297.  
  298.  
  299. 1.2
  300. log
  301. @fsflat changed to wish
  302. @
  303. text
  304. @d18 1
  305. a18 1
  306. static char rcsid[] = "$Header: wishUtils.c,v 1.1 88/10/03 12:48:54 mlgray Exp $ SPRITE (Berkeley)";
  307. a232 1
  308.  
  309. @
  310.  
  311.  
  312. 1.1
  313. log
  314. @Initial revision
  315. @
  316. text
  317. @d2 1
  318. a2 1
  319.  * fsflatUtils.c --
  320. d18 1
  321. a18 1
  322. static char rcsid[] = "$Header: fsflatUtils.c,v 1.3 88/06/05 19:56:06 mlgray Exp $ SPRITE (Berkeley)";
  323. d25 1
  324. a25 1
  325. #include "fsflatInt.h"
  326. d27 1
  327. a27 1
  328. static    FsflatWindow    *menuWindow = NULL;
  329. d33 1
  330. a33 1
  331.  * FsflatCvtToPrintable --
  332. d49 1
  333. a49 1
  334. FsflatCvtToPrintable(string, length, result)
  335. d138 1
  336. a138 1
  337.  * FsflatMenuProc --
  338. d141 1
  339. a141 1
  340.  *    in an fsflat window.  It now forces the interpreter to be the
  341. d154 1
  342. a154 1
  343. FsflatMenuProc(command)
  344. d158 1
  345. a158 1
  346.     FsflatWindow    *aWindow;
  347. d164 1
  348. a164 1
  349.     if (XFindContext(fsflatDisplay, w, fsflatWindowContext, (caddr_t) &aWindow)
  350. d166 1
  351. a166 1
  352.     Sx_Panic(fsflatDisplay, "Fsflat didn't recognize given window.");
  353. d169 1
  354. a169 1
  355.     (void) FsflatDoCmd(aWindow, command);
  356. d180 1
  357. a180 1
  358.  * FsflatMakeMenu --
  359. d196 2
  360. a197 2
  361. FsflatMakeMenu(aWindow, name, size, info)
  362.     register    FsflatWindow    *aWindow;/* Window in which to create menu. */
  363. d210 1
  364. a210 1
  365.     (void) Sx_MenuCreate(fsflatDisplay, aWindow->menuBar, name, size, entries,
  366. d218 1
  367. a218 1
  368.  * FsflatMenuEntryProc --
  369. d228 1
  370. a228 1
  371.  *    Fsflat window the cursor's in, so that we'll know when a menu
  372. d235 2
  373. a236 2
  374. FsflatMenuEntryProc(aWindow, eventPtr)
  375.     FsflatWindow *aWindow;        /* Window whose menu bar was just
  376. d240 1
  377. d244 1
  378. @
  379.